/**
 * 修改数组本身属性的方法
 */

const oldArr = [
    {
        id:1,
        name:'111',
        age:12
    },
    {
        id:2,
        name:'222',
        age:12,
        sub:[
            {
                id:'2-1',
                name:'2-11111',
                age:'2222'
            },
            {
                id:'2-2',
                name:'2-222222',
                age:'3333'
            }
        ]
    },
    {
        id:3,
        name:'333',
        age:13
    },
]

const changeArrayObj=arr=> {
    const newResult = arr.map(item => {
        return {...item, addItem:'ok'}
    })
    return newResult;
}

// console.log( changeArrayObj(oldArr) );

const changeArrayObj2 = arr => {
    if(arr && arr.length) {
        const newResult = arr.map(item => {
            if(item.sub) {
              return  item.sub.map(s=> {
                    return {...s, addItem:'okkk'}
                })
            }
            return item
        })
        return newResult
    }
    return []
}


// map不会修改数据本身,但是可以返回一个数组,是修改后的数组
const changeArrayObj3 = arr => {
    if(arr && arr.length) {
        return arr.map(item => {
            return {...item, addItem:'okkkkk11'}
        })
    }
}
// console.log(changeArrayObj3(oldArr));
// console.log(oldArr);


// 直接for循环,会修改形参本身的数据
const changeArrayObj4 = arr=> {
    if(arr && arr.length) {
        for(let i=0; i<arr.length; i++) {
            arr[i].addItem = '4'
        }
    }
    return arr
}
// console.log(chan


// for循环,新建一个数组
const changeArrayObj5 = arr=> {
    let newResult =[]
    for(let i=0; i<arr.length; i++) {
        newResult[i] = {...arr[i]} // 这里要做深拷贝
        newResult[i].addItem = '55555'
    }
    return newResult;
}

console.log(changeArrayObj5(oldArr));
console.log(oldArr);